package com.sys.tdhclient.startapp

import java.util.Properties

import com.alibaba.fastjson.JSON
import com.sys.tdhclient.utils.SparkSc
import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession

object SparkRddtest {
  private val sparkContext: SparkContext = SparkSc.getSparkContext()
  private val sparkSession: SparkSession = SparkSc.getSparkSession()
  private val properties: Properties = SparkSc.getProperties()
  def main(args: Array[String]): Unit = {
    val RDD = sparkContext.textFile("file:///D:/obj/tdhclient/log/test.json")
//    val frame = sparkSession.read.json("file:///D:/obj/tdhclient/log/test.json")
    /**
      * map将函数作用到数据集的每一个元素上，生成一个新的分布式的数据集(RDD)返回
      *
      * map将每一条输入执行func操作并对应返回一个对象，形成一个新的rdd，如源码中的rdd.map(lambda x: (x, 1) -->  [('a', 1), ('b', 1), ('c', 1)]
      */
    RDD.map(f=>(JSON.parseObject(f).getString("name"))).foreach(f=>(println(f)))

    /**
      * flatMap会先执行map的操作，再将所有对象合并为一个对象，返回值是一个Sequence
      */
    //RDD.flatMap(f=>(JSON.parseObject(f).getString("name"))).foreach(f=>(print(f)))
    /**
      * mapPartitions 函数获取到每个分区的器在函数中通过这个分区整体的迭代器对整个分区的元素进行操作内部实现是生成MapPartitionsRDD
      */
//    RDD.map(f=>(JSON.parseObject(f).getString("name"))).foreach(f=>(print(f)))
    /**
      * 　glom函数将每个分区形成一个数组，内部实现是返回的GlommedRDD。 图4中的每个方框代表一个RDD分区。图4中的方框代表一个分区。 该图表示含有V1、 V2、 V3的分区通过函数glom形成一数组Array[（V1），（V2），（V3）]。
      */
//    RDD.glom().foreach(f=>(for (a <- f){println(a)}))
    /**
      * 使用 union 函数时需要保证两个 RDD 元素的数据类型相同，返回的 RDD 数据类型和被合并的 RDD 元素数据类型相同，并不进行去重操作，保存所有元素。如果想去重以使用 distinct()。同时 Spark 还提供更为简洁的使用 union 的 API，通过 ++ 符号相当于 union 函数操作。
      *
       */
//    val RDD1 = sparkContext.textFile("file:///D:/obj/tdhclient/log/test.json")
//    (RDD++RDD1).foreach(f=>println(f))


  }
}
